﻿Public Class frm_Empleados

    Enum estado
        insertar
        modificar
    End Enum
    Enum termino
        aprobado
        rechazado
    End Enum

    Dim primer_acceso As Boolean = False

    Public Property _primer_acceso
        Get
            Return primer_acceso
        End Get
        Set(ByVal value)
            primer_acceso = value
        End Set
    End Property

    Dim auxvalidar As Boolean = False
    Dim primera_busqueda As Boolean = False
    Dim accion As estado = estado.insertar
    Dim _acceso As New acceso_a_datos
    Dim carga_combo As New combo

    'Cargamos el formulario
    Private Sub frm_Alumnos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        _acceso._tabla = "Cargo_Empleado"

        carga_combo.cargar(Me.cmb_cargo, _acceso.leo_tabla(), "nombre", "cod_Cargo")

        _acceso._tabla = "Barrio"
        carga_combo.cargar(Me.cmb_barrio, _acceso.leo_tabla(), "nombre", "cod_Barrio")

        Me.btn_buscar.Enabled = True
        Me.btn_guardar.Enabled = False
        Me.btn_eliminar.Enabled = False
        Me.btn_agregar_barrios.Enabled = False

        Me.deshabilitarCampos()
        Me.carga_grilla()

        If primer_acceso Then
            hacer_primer_acceso(sender, e)
        End If
    End Sub

    'Detectar si se colocaron numeros en los campos correspondientes
    Private Sub txt_numDoc_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_numDoc.KeyPress, txt_nroCalle.KeyPress, txt_nroPiso.KeyPress
        Select Case Asc(e.KeyChar)
            Case 4, 24, 4, 19, 127, 13, 9, 15, 14, 8
                Exit Sub
        End Select

        If IsNumeric(e.KeyChar) = False Then
            MsgBox("Este carater no es un numero ( " + e.KeyChar + " )", vbCritical, "Importante")
            e.KeyChar = ""
        End If
    End Sub

    'Boton Nuevo
    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        Me.btn_buscar.Enabled = False
        Me.btn_guardar.Enabled = True
        Me.btn_eliminar.Enabled = False
        Me.btn_agregar_barrios.Enabled = True

        Me.habilitarCampos()

        'borrar una ves entes de implementar
        indicar_obligatorios(sender, e)

        'Limpiamos campos General
        Me.limpiar()
        Me.txt_apellido.Focus()

        Me.accion = estado.insertar
    End Sub

    'Boton Eliminar Empleado
    Private Sub btn_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_eliminar.Click

        If txt_numDoc.Text = "" Then
            MsgBox("Debe seleccionar un Empleado antes de borrar", MsgBoxStyle.Exclamation, "Atencion")
            Exit Sub
        End If
        If MsgBox("¿Realmente desea Borrar?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Importante") = MsgBoxResult.No Then
            Exit Sub
        End If

        If validar_ultimo_encargado() = False Then
            Me.eliminar()
        Else
            MsgBox("No se puede eliminar el empleado por ser el unico Encargado registrado", MsgBoxStyle.Critical, "Atencion")
        End If

        Me.carga_grilla()
        Me.limpiar()

        Me.btn_eliminar.Enabled = False
        Me.btn_buscar.Enabled = False
        Me.btn_guardar.Enabled = False
        Me.btn_agregar_barrios.Enabled = False
        Me.deshabilitarCampos()
    End Sub

    'Boton Guardar Empleado
    Private Sub btn_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guardar.Click
        'llamo a la funcion validar
        If Me.validar(sender, e) = True Then
            If Me.txt_contraseña.Text <> Me.txt_repiteContra.Text Then
                MessageBox.Show("Las contraseñas no coinciden", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End If

            If Me.accion = estado.insertar Then
                If Me.validar_existencia() = termino.aprobado Then
                    Me.insertar()
                Else
                    MessageBox.Show("Ya esta cargada una persona con ese documento", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Exit Sub
                End If
            Else
                Me.modificar()
            End If

            Me.carga_grilla()

            MessageBox.Show("Se grabó exitosamente", "Felicidades", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            Me.limpiar()
            Me.auxvalidar = False
            Me.btn_guardar.Enabled = False
            Me.btn_eliminar.Enabled = False
            Me.btn_buscar.Enabled = True

            Me.deshabilitarCampos()

            If primer_acceso = True Then
                Me.Close()
            End If
        End If
    End Sub

    'Boton Salir
    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        Close()
    End Sub

    'Boton Validar Usuario
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_validar.Click

        Dim tabla As New Data.DataTable
        Dim consulta As String = ""

        If Me.txt_usuario.TextLength = 0 Then
            MessageBox.Show("Debe ingresar un usuario", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            Try
                consulta = "SELECT * FROM Empleado WHERE UPPER(nombre_Usuario) like upper('" & Me.txt_usuario.Text & "')"
                tabla = _acceso._consulta(consulta)

            Catch ex As Exception
            Finally
                If tabla.Rows.Count = 0 Then
                    MessageBox.Show("Usuario Disponible", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                    Me.auxvalidar = True
                Else
                    MessageBox.Show("Usuario No Disponible", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.auxvalidar = False
                End If
            End Try
        End If

        tabla.Reset()
    End Sub

    'Limpiamos campos
    Public Sub limpiar()
        Me.txt_apellido.Text = ""
        Me.txt_nombres.Text = ""
        Me.txt_tipoDoc.Text = "DNI"
        Me.txt_numDoc.Text = ""
        Me.cmb_cargo.SelectedValue = 0
        Me.txt_calle.Text = ""
        Me.txt_nroCalle.Text = ""
        Me.txt_dpto.Text = ""
        Me.txt_nroPiso.Text = ""
        Me.cmb_barrio.SelectedValue = 0
        Me.txt_usuario.Text = ""
        Me.txt_contraseña.Text = ""
        Me.txt_repiteContra.Text = ""
        Me.txt_apellido.Focus()
    End Sub

    Private Sub deshabilitarCampos()
        'Datos Personales
        Me.txt_apellido.Enabled = False
        Me.txt_nombres.Enabled = False
        Me.txt_tipoDoc.Enabled = False
        Me.txt_numDoc.Enabled = False
        Me.cmb_cargo.Enabled = False
        'Domicilio
        Me.txt_calle.Enabled = False
        Me.txt_nroCalle.Enabled = False
        Me.txt_dpto.Enabled = False
        Me.txt_nroPiso.Enabled = False
        Me.cmb_barrio.Enabled = False
        'Usuario
        Me.txt_usuario.Enabled = False
        Me.btn_validar.Enabled = False
        Me.txt_contraseña.Enabled = False
        Me.txt_repiteContra.Enabled = False
    End Sub

    Private Sub habilitarCampos()
        'Datos Personales
        Me.txt_apellido.Enabled = True
        Me.txt_nombres.Enabled = True
        Me.txt_numDoc.Enabled = True
        Me.cmb_cargo.Enabled = True
        'Domicilio
        Me.txt_calle.Enabled = True
        Me.txt_nroCalle.Enabled = True
        Me.txt_dpto.Enabled = True
        Me.txt_nroPiso.Enabled = True
        Me.cmb_barrio.Enabled = True
        'Usuario
        Me.txt_usuario.Enabled = True
        Me.btn_validar.Enabled = True
        Me.txt_contraseña.Enabled = True
        Me.txt_repiteContra.Enabled = True
    End Sub

    'Funcion para validar Datos
    Private Function validar(ByVal sender As System.Object, ByVal e As System.EventArgs) As Boolean
        'Datos Personales
        If Me.txt_apellido.Text = "" Then
            'MessageBox.Show("Debe completar el campo Apellido", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_apellido.Focus()
            Return False
        End If

        If Me.txt_nombres.Text = "" Then
            'MessageBox.Show("Debe completar el campo Nombres", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_nombres.Focus()
            Return False
        End If

        If Me.txt_numDoc.Text = "" Then
            'MessageBox.Show("Debe completar el campo Número de documento", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_numDoc.Focus()
            Return False
        End If

        If Me.cmb_cargo.Text = "" Then
            MessageBox.Show("Debe seleccionar un Cargo", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            Me.cmb_cargo.Focus()
            Return False
        End If

        'Direccion
        If Me.txt_calle.Text = "" Then
            'MessageBox.Show("Debe completar el campo Calle", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_calle.Focus()
            Return False
        End If

        If Me.txt_nroCalle.Text = "" Then
            'MessageBox.Show("Debe completar el campo Número de calle", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_nroCalle.Focus()
            Return False
        End If

        If Me.txt_dpto.Text = "" Then
            'MessageBox.Show("Debe completar el campo Departamento", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_dpto.Focus()
            ToolTip1.Show("Ingrese 0 si no aplica", txt_dpto)
            Return False
        End If

        If Me.txt_nroPiso.Text = "" Then
            'MessageBox.Show("Debe completar el campo Número de Piso", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_nroPiso.Focus()
            ToolTip1.Show("Ingrese 0 si no aplica", txt_nroPiso)
            Return False
        End If

        If Me.cmb_barrio.Text = "" Then
            'MessageBox.Show("Debe completar el campo Usuario", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.cmb_barrio.Focus()
            Return False
        End If
        'Datos Usuario
        If Me.txt_usuario.Text = "" Then
            'MessageBox.Show("Debe completar el campo Usuario", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_usuario.Focus()
            Return False
        End If

        If Me.txt_contraseña.Text = "" Then
            'MessageBox.Show("Debe completar el campo Contraseña", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_contraseña.Focus()
            Return False
        End If

        If Me.txt_repiteContra.Text = "" Then
            'MessageBox.Show("Debe completar el campo Repita Contraseña", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            indicar_obligatorios(sender, e)
            Me.txt_repiteContra.Focus()
            Return False
        End If

        If Me.auxvalidar = False Then
            MessageBox.Show("Debe Validar el Usuario", "IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            Me.btn_validar.Focus()
            Return False
        End If

        Return True
    End Function

    'Validamos la existencia en la Base de Datos 
    Private Function validar_existencia() As termino

        Dim consulta As String = ""
        Dim tabla As New Data.DataTable

        consulta = "SELECT * FROM Empleado "
        consulta &= "WHERE numero_Doc=" & Me.txt_numDoc.Text

        tabla = _acceso._consulta(consulta)

        'Vemos si hay algo en las FILAS
        If tabla.Rows.Count() = 1 Then
            Return termino.rechazado
        Else
            Return termino.aprobado
        End If
    End Function

    'Funcion para insertar.
    Private Function insertar() As termino
        Me._acceso._tabla = "Empleado"
        Dim consulta As String

        'inserta en la tabla empleado esos datos...

        ' IMPORTANTE!! NO DEJAR ESPACIO DESPUES DEL SIGNO IGUAL, SINO EN LA BD SE
        '  GRABA EL CAMPO CON UN ESPACIO AL PRINCIPIO
        '  OJO!!

        consulta = "INSERT INTO Empleado (numero_Doc, tipo_Doc, nombre, apellido, calle, nro_Calle, "
        consulta += "nro_Depto, nro_Piso, cod_Barrio, cod_Cargo, nombre_Usuario, contraseña_Usuario)"
        consulta += " VALUES (" & txt_numDoc.Text
        consulta += ", '" & txt_tipoDoc.Text
        consulta += "', '" & txt_nombres.Text
        consulta += "', '" & txt_apellido.Text
        consulta += "', '" & txt_calle.Text
        consulta += "', " & txt_nroCalle.Text
        consulta += ", '" & txt_dpto.Text
        consulta += "', " & txt_nroPiso.Text
        consulta += ", " & cmb_barrio.SelectedValue
        consulta += ", " & cmb_cargo.SelectedValue
        consulta += ", '" & txt_usuario.Text
        consulta += "', HASHBYTES('SHA1', '" & txt_contraseña.Text & "'))"

        Try
            _acceso._consulta(consulta)
            primer_acceso = False
            Return termino.aprobado
        Catch ex As Exception
            MessageBox.Show("Error al Insertar Empleado en la base de datos" & vbCrLf + vbCrLf & "Mensaje de error: " & vbCrLf + ex.Message, "Error al Insertar en la base de datos", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
            Return termino.rechazado
            Exit Function
        End Try
    End Function

    'Funcion Modificar
    Private Function modificar() As termino

        Dim cmd As New Data.SqlClient.SqlCommand
        Dim modificacion As String = ""

        modificacion = "UPDATE Empleado Set "
        modificacion &= "apellido='" & Me.txt_apellido.Text & "'"
        modificacion &= ", nombre='" & Me.txt_nombres.Text & "'"
        modificacion &= ", calle='" & Me.txt_calle.Text & "'"
        modificacion &= ", nro_Calle=" & Me.txt_nroCalle.Text
        modificacion &= ", nro_Depto='" & Me.txt_dpto.Text & "'"
        modificacion &= ", nro_Piso=" & Me.txt_nroPiso.Text
        modificacion &= ", cod_Barrio=" & Me.cmb_barrio.SelectedValue
        modificacion &= ", cod_Cargo=" & Me.cmb_cargo.SelectedValue
        modificacion &= ", contraseña_Usuario=HASHBYTES('SHA1', '" & txt_contraseña.Text & "')"

        'Busca la fila que quiero modificar
        modificacion &= " WHERE numero_Doc=" & Me.txt_numDoc.Text

        _acceso._modificar(modificacion)
        Me.carga_grilla()

        Return termino.aprobado
    End Function

    'Funcion Eliminar
    Private Function eliminar() As termino

        Dim eliminar_sql As String
        Dim consulta As String = ""

        'primero eliminamos los horarios del empleado
        Try
            consulta = "DELETE FROM Horario WHERE numero_Doc=" & Me.txt_numDoc.Text
            _acceso._borrar(consulta)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
            Return termino.rechazado
            Exit Function
        End Try
        
        'ahora eliminamos el empleado
        Try
            eliminar_sql = "DELETE FROM Empleado WHERE numero_Doc=" & Me.txt_numDoc.Text
            _acceso._borrar(eliminar_sql)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
            Return termino.rechazado
            Exit Function
        End Try
        
        Me.carga_grilla()

        Return termino.aprobado
    End Function

    'Cargamos la Grilla
    Private Sub carga_grilla()

        Dim tabla As New Data.DataTable
        Dim txt_sql As String = ""
        txt_sql = "SELECT  Empleado.nombre_Usuario, Cargo_Empleado.nombre as car,  Empleado.cod_Cargo, Empleado.apellido, Empleado.nombre, Empleado.tipo_Doc, Empleado.numero_Doc "
        txt_sql += " FROM Empleado INNER JOIN Cargo_Empleado "
        txt_sql += " ON Empleado.cod_Cargo = Cargo_Empleado.cod_Cargo"

        tabla = _acceso._consulta(txt_sql)

        Me.grilla_Empleados.Rows.Clear()

        'cargamos la grilla con un metodo
        Dim c As Integer = 0

        For c = 0 To tabla.Rows.Count - 1
            Me.grilla_Empleados.Rows.Add(tabla.Rows(c)("nombre_Usuario"), tabla.Rows(c)("car"), tabla.Rows(c)("apellido"), tabla.Rows(c)("nombre"), tabla.Rows(c)("tipo_Doc"), tabla.Rows(c)("numero_Doc"))
        Next
    End Sub

    'Doble Click Grilla
    Private Sub grilla_Empleados_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grilla_Empleados.CellDoubleClick
        Dim doc As Integer = Me.grilla_Empleados.CurrentRow.Cells("num_Doc").Value
        Dim td As String = Me.grilla_Empleados.CurrentRow.Cells("tip_Doc").Value

        Dim tabla As New Data.DataTable
        Dim consulta As String = ""

        consulta = "SELECT * FROM Empleado WHERE numero_Doc=" & doc
        consulta &= " AND tipo_Doc='" & td & "'"
        tabla = _acceso._consulta(consulta)

        Me.btn_guardar.Enabled = True
        Me.btn_eliminar.Enabled = True
        Me.btn_buscar.Enabled = True
        Me.btn_agregar_barrios.Enabled = True
        Me.auxvalidar = True

        'Datos Personales
        Me.txt_apellido.Enabled = True
        Me.txt_nombres.Enabled = True
        Me.txt_numDoc.Enabled = False
        Me.cmb_cargo.Enabled = True

        'Domicilio
        Me.txt_calle.Enabled = True
        Me.txt_nroCalle.Enabled = True
        Me.txt_dpto.Enabled = True
        Me.txt_nroPiso.Enabled = True
        Me.cmb_barrio.Enabled = True

        'Usuario
        Me.txt_usuario.Enabled = False
        Me.btn_validar.Enabled = False
        Me.txt_contraseña.Enabled = True
        Me.txt_repiteContra.Enabled = True

        Me.txt_apellido.Text = tabla.Rows(0)("apellido")
        Me.txt_nombres.Text = tabla.Rows(0)("nombre")
        Me.txt_tipoDoc.Text = "DNI"
        Me.txt_numDoc.Text = doc
        Me.txt_numDoc.Enabled = False
        Me.txt_tipoDoc.Enabled = False
        Me.cmb_cargo.SelectedValue = tabla.Rows(0)("cod_Cargo")
        Me.txt_calle.Text = tabla.Rows(0)("calle")
        Me.txt_nroCalle.Text = tabla.Rows(0)("nro_Calle")
        Me.txt_dpto.Text = tabla.Rows(0)("nro_Depto")
        Me.txt_nroPiso.Text = tabla.Rows(0)("nro_Piso")
        Me.cmb_barrio.SelectedValue = tabla.Rows(0)("cod_Barrio")
        Me.txt_usuario.Text = tabla.Rows(0)("nombre_Usuario")
        Me.txt_contraseña.Text = tabla.Rows(0)("contraseña_Usuario")
        Me.txt_repiteContra.Text = tabla.Rows(0)("contraseña_Usuario")

        If validar_ultimo_encargado() = True Then
            Me.cmb_cargo.Enabled = False
        End If

        Me.accion = estado.modificar
        lbl_apellido_obligatorio.Visible = False
        indicar_obligatorios(sender, e)
    End Sub

    'boton buscar empleado
    Private Sub btn_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_buscar.Click

        If Me.primera_busqueda = False Then

            Me.btn_guardar.Enabled = False
            Me.btn_eliminar.Enabled = False
            Me.btn_buscar.Enabled = True

            'Datos Personales
            Me.txt_apellido.Enabled = True
            Me.txt_nombres.Enabled = False
            Me.txt_numDoc.Enabled = False
            Me.cmb_cargo.Enabled = False
            'Domicilio
            Me.txt_calle.Enabled = False
            Me.txt_nroCalle.Enabled = False
            Me.txt_dpto.Enabled = False
            Me.txt_nroPiso.Enabled = False
            Me.cmb_barrio.Enabled = False
            'Usuario
            Me.txt_usuario.Enabled = True
            Me.btn_validar.Enabled = False
            Me.txt_contraseña.Enabled = False
            Me.txt_repiteContra.Enabled = False

            Me.txt_apellido.Focus()
            Me.primera_busqueda = True
            Me.carga_grilla()
            Me.limpiar()
        Else
            If Me.txt_apellido.Text = "" And Me.txt_usuario.Text = "" Then
                MsgBox("Debe ingresar un apellido o nombre de usuario", vbExclamation, "Atencion")
                Me.txt_apellido.Focus()
            End If

            If Me.txt_usuario.Text = "" And Me.txt_apellido.Text <> "" Then
                Me.buscar_por_apellido()
                Me.limpiar()
                Me.deshabilitarCampos()
                Me.btn_guardar.Enabled = False
                Me.btn_eliminar.Enabled = False
                Me.primera_busqueda = False
            End If

            If Me.txt_usuario.Text <> "" And Me.txt_apellido.Text = "" Then
                Me.buscar_por_usuario()
                Me.limpiar()
                Me.deshabilitarCampos()
                Me.btn_guardar.Enabled = False
                Me.btn_eliminar.Enabled = False
                Me.primera_busqueda = False
            End If

            If Me.txt_usuario.Text <> "" And Me.txt_apellido.Text <> "" Then
                Me.buscar_por_apellido_y_usuario()
                Me.limpiar()
                Me.deshabilitarCampos()
                Me.btn_guardar.Enabled = False
                Me.btn_eliminar.Enabled = False
                Me.primera_busqueda = False
            End If
        End If
    End Sub

    'busqueda por apellido
    Private Sub buscar_por_apellido()

        Dim cons As String = ""
        Me._acceso._tabla = "Empleado"

        Dim tabla As New Data.DataTable

        cons = "SELECT Cargo_Empleado.nombre AS nombre_cargo, Empleado.numero_Doc, Empleado.tipo_Doc, Empleado.nombre, Empleado.apellido, Empleado.nombre_Usuario"
        cons &= " FROM (Empleado INNER JOIN Cargo_Empleado ON Empleado.cod_Cargo = Cargo_Empleado.cod_Cargo)"
        cons &= " WHERE Empleado.apellido LIKE '" & Me.txt_apellido.Text & "%' COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI"

        tabla = Me._acceso._consulta(cons)

        Me.grilla_Empleados.Rows.Clear()

        If tabla.Rows.Count <> 0 Then
            Me.grilla_Empleados.Rows.Add(tabla.Rows(0)("nombre_Usuario"), tabla.Rows(0)("nombre_cargo"), tabla.Rows(0)("apellido"), tabla.Rows(0)("nombre") _
                                         , tabla.Rows(0)("tipo_Doc"), tabla.Rows(0)("numero_Doc"))
            Me.txt_apellido.Text = ""
            Me.txt_apellido.Focus()
            Exit Sub
        Else
            MsgBox("No se encontro ningun Empleado con ese apellido", vbExclamation, "Importante")
            Me.txt_apellido.Text = ""
            Me.txt_apellido.Focus()
            Me.carga_grilla()
        End If
    End Sub

    'busqueda por nombre de usuario
    Private Sub buscar_por_usuario()
        Dim cons As String = ""
        Me._acceso._tabla = "Empleado"

        Dim tabla As New Data.DataTable

        cons = "SELECT Cargo_Empleado.nombre AS nombre_cargo, Empleado.numero_Doc, Empleado.tipo_Doc, Empleado.nombre, Empleado.apellido, Empleado.nombre_Usuario"
        cons &= " FROM (Empleado INNER JOIN Cargo_Empleado ON Empleado.cod_Cargo = Cargo_Empleado.cod_Cargo)"
        cons &= " WHERE Empleado.nombre_Usuario LIKE '" & Me.txt_usuario.Text & "%' COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI"

        tabla = Me._acceso._consulta(cons)

        Me.grilla_Empleados.Rows.Clear()

        If tabla.Rows.Count <> 0 Then
            Me.grilla_Empleados.Rows.Add(tabla.Rows(0)("nombre_Usuario"), tabla.Rows(0)("nombre_cargo"), tabla.Rows(0)("apellido"), tabla.Rows(0)("nombre") _
                                         , tabla.Rows(0)("tipo_Doc"), tabla.Rows(0)("numero_Doc"))
            Me.txt_usuario.Text = ""
            Me.txt_apellido.Text = ""
            Me.txt_apellido.Focus()
            Exit Sub
        Else
            MsgBox("No se encontro ningun Empleado con ese apellido", vbExclamation, "Importante")
            Me.txt_usuario.Text = ""
            Me.txt_apellido.Text = ""
            Me.txt_apellido.Focus()
            Me.carga_grilla()
        End If
    End Sub

    'busqueda por apellido y nombre de usuario
    Private Sub buscar_por_apellido_y_usuario()
        Dim cons As String = ""
        Me._acceso._tabla = "Empleado"

        Dim tabla As New Data.DataTable

        cons = "SELECT Cargo_Empleado.nombre AS nombre_cargo, Empleado.numero_Doc, Empleado.tipo_Doc, Empleado.nombre, Empleado.apellido, Empleado.nombre_Usuario"
        cons &= " FROM (Empleado INNER JOIN Cargo_Empleado ON Empleado.cod_Cargo = Cargo_Empleado.cod_Cargo)"
        cons &= " WHERE Empleado.apellido LIKE '" & Me.txt_apellido.Text & "%' COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI"
        cons &= " AND Empleado.nombre_Usuario LIKE '" & Me.txt_usuario.Text & "%' COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI"

        tabla = Me._acceso._consulta(cons)

        Me.grilla_Empleados.Rows.Clear()

        If tabla.Rows.Count <> 0 Then
            Me.grilla_Empleados.Rows.Add(tabla.Rows(0)("nombre_Usuario"), tabla.Rows(0)("nombre_cargo"), tabla.Rows(0)("apellido"), tabla.Rows(0)("nombre") _
                                         , tabla.Rows(0)("tipo_Doc"), tabla.Rows(0)("numero_Doc"))
            Me.txt_usuario.Text = ""
            Me.txt_apellido.Text = ""
            Me.txt_apellido.Focus()
            Exit Sub
        Else
            MsgBox("No se encontro ningun Empleado con ese apellido o ese nombre de usuario", vbExclamation, "Importante")
            Me.txt_usuario.Text = ""
            Me.txt_apellido.Text = ""
            Me.txt_apellido.Focus()
            Me.carga_grilla()
        End If
    End Sub

    Private Sub txt_apellido_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_apellido.Leave
        If txt_apellido.Text = "" And txt_apellido.Enabled = True And btn_salir.Focused = False Then
            lbl_apellido_obligatorio.Visible = True
        Else
            lbl_apellido_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_nombres_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nombres.Leave
        If txt_nombres.Text = "" And txt_nombres.Enabled = True And btn_salir.Focused = False Then
            lbl_nombre_obligatorio.Visible = True
        Else
            lbl_nombre_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_numDoc_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_numDoc.Leave
        If txt_numDoc.Text = "" And txt_numDoc.Enabled = True And btn_salir.Focused = False Then
            lbl_nro_doc_obligatorio.Visible = True
        Else
            lbl_nro_doc_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_calle_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_calle.Leave
        If txt_calle.Text = "" And txt_calle.Enabled = True And btn_salir.Focused = False Then
            lbl_calle_obligatorio.Visible = True
        Else
            lbl_calle_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_nroCalle_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nroCalle.Leave
        If txt_nroCalle.Text = "" And txt_nroCalle.Enabled = True And btn_salir.Focused = False Then
            lbl_nro_calle_obligatorio.Visible = True
        Else
            lbl_nro_calle_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_dpto_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_dpto.Leave
        If txt_dpto.Text = "" And txt_dpto.Enabled = True And btn_salir.Focused = False Then
            lbl_depto_obligatorio.Visible = True
        Else
            lbl_depto_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_nroPiso_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nroPiso.Leave
        If txt_nroPiso.Text = "" And txt_nroPiso.Enabled = True And btn_salir.Focused = False Then
            lbl_piso_obligatorio.Visible = True
        Else
            lbl_piso_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_usuario_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_usuario.Leave
        If txt_usuario.Text = "" And txt_usuario.Enabled = True And btn_salir.Focused = False Then
            lbl_usuario_obligatorio.Visible = True
        Else
            lbl_usuario_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_contraseña_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_contraseña.Leave
        If txt_contraseña.Text = "" And txt_contraseña.Enabled = True And btn_salir.Focused = False Then
            lbl_pass_obligatorio.Visible = True
        Else
            lbl_pass_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_repiteContra_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_repiteContra.Leave
        If txt_repiteContra.Text = "" And txt_usuario.Enabled = True And btn_salir.Focused = False Then
            lbl_pass_repetir_obligatorio.Visible = True
        Else
            lbl_pass_repetir_obligatorio.Visible = False
        End If
    End Sub

    Private Sub txt_dpto_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_dpto.TextChanged
        ToolTip1.Hide(txt_dpto)
    End Sub

    Private Sub txt_nroPiso_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nroPiso.TextChanged
        ToolTip1.Hide(txt_nroPiso)
    End Sub

    Private Sub btn_agregar_barrios_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_agregar_barrios.Click
        Barrio.ShowDialog()
        _acceso._tabla = "Barrio"
        carga_combo.cargar(Me.cmb_barrio, _acceso.leo_tabla(), "nombre", "cod_Barrio")
    End Sub

    'Para que se prendan todas juntas
    Public Sub indicar_obligatorios(ByVal sender As System.Object, ByVal e As System.EventArgs)
        txt_nombres_Leave(sender, e)
        txt_apellido_Leave(sender, e)
        txt_numDoc_Leave(sender, e)
        txt_calle_Leave(sender, e)
        txt_nroCalle_Leave(sender, e)
        txt_dpto_Leave(sender, e)
        txt_nroPiso_Leave(sender, e)
        txt_usuario_Leave(sender, e)
        txt_contraseña_Leave(sender, e)
        txt_repiteContra_Leave(sender, e)
    End Sub

    'Funcion que valida si es el ultimo encargado y no deja eliminarlo
    Private Function validar_ultimo_encargado() As Boolean

        Dim doc As String = Me.txt_numDoc.Text
        Dim consulta As String = ""
        Dim tabla As Data.DataTable

        consulta = "SELECT * FROM Empleado WHERE cod_Cargo=0"

        tabla = Me._acceso._consulta(consulta)

        If tabla.Rows.Count > 1 Then
            Return False
        Else
            If tabla.Rows(0)("numero_Doc").ToString = doc Then
                Return True
            Else
                Return False
            End If
        End If
    End Function

    Public Sub hacer_primer_acceso(ByVal sender As System.Object, ByVal e As System.EventArgs)
        btn_nuevo_Click(sender, e)
        cmb_cargo.SelectedValue = id_Encargado()
        cmb_cargo.Enabled = False
        btn_nuevo.Enabled = False
    End Sub

    'Funcion que retorna el cod de Encargado
    Public Function id_Encargado() As Integer
        Dim tabla As New Data.DataTable
        Dim txt_sql As String = ""
        Dim resul As Integer

        txt_sql = "SELECT cod_Cargo"
        txt_sql += " FROM Cargo_Empleado"
        txt_sql += " WHERE (nombre)='ENCARGADO'"

        tabla = _acceso._consulta(txt_sql)

        If tabla.Rows.Count > 0 Then
            resul = tabla.Rows(0)(0)
        Else
            resul = -1
        End If

        Return resul
    End Function

    Private Sub frm_Empleados_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        Dispose()
    End Sub
End Class
